package com.example.temp;


import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

public class Test23 {

    public static void main(String[] args) {
        Map<String, Object> m = new HashMap();
        m.put("key", "blarg");
        String s = (String) m.get("key");

        System.out.println(s);
    }



    /**
     * 输入一颗二叉树的根节点和一个整数，打印出二叉树中结点值的和为输入整数的所有路径。
     * 路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
     *
     *          1
     *    2          3
     *
     * 4    5     6     7
     */
    public class TreeNode {
        int val = 0;
        TreeNode left = null;
        TreeNode right = null;

        public TreeNode(int val) {
            this.val = val;

        }
    }


    public class Solution {

        public ArrayList<ArrayList<Integer>> FindPath(TreeNode root, int target) {

            ArrayList<ArrayList<Integer>> result = new ArrayList<>();
            if (root==null){
                return result;
            }
            serch(root,0,new ArrayList<Integer>(),target,result);
            return result;
        }

        private void serch(TreeNode node, int sum, ArrayList<Integer> list, int target, ArrayList<ArrayList<Integer>> result) {

            if (sum==target&&!result.contains(list)&&node==null){
                result.add(list);
                return;
            }

            if (node==null){
                return;
            }



            sum = sum+node.val;
            list.add(node.val);
            if (sum>target)
                return;
            ArrayList<Integer> list2 = new ArrayList<>();
            list2.addAll(list);
//          new ArrayList<>(list) 为了使左右节点遍历互不影响  如果都传list 左右节点同时遍历 会把左右节点都加进去
//          也可以new 一个list2 list2.addAll(list)
//            serch(node.left,sum,new ArrayList<>(list),target,result);
//            serch(node.right,sum,new ArrayList<>(list),target,result);

            serch(node.left,sum,list,target,result);
            serch(node.right,sum,list2,target,result);
        }




    }
}
